package coreconcurrency.blocking;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.concurrent.BlockingQueue;

/**
 * 工作（消费）线程，从阻塞队列中取出product
 */
class SearchTask implements Runnable {
    private BlockingQueue<File> bq;
    private String aimStr;

    public SearchTask(BlockingQueue<File> bq, String aimStr) {
        this.bq = bq;
        this.aimStr = aimStr;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread());
        try {
            boolean flag = true;
            while (flag) {
                File file = bq.take();
                if (file == FileEnumerationTask.DUMMY) {
                    // 终止while循环，
                    flag = false;
                    bq.put(file);
                    //  break;想想这里为什么不用break;
                } else {
                    search(file, aimStr);
                }
            }
        } catch (Exception e) {

        }
    }

    private void search(File file, String str) throws Exception {
        // FileReader fr =new FileReader(file);我记得有一个readline函数，但是这里没有啊，怎么回事，BufferReader
        // java IO读取惯用的手法就是装饰器模式。
        BufferedReader br = new BufferedReader(new FileReader(file));
        // 在读中文的时候有乱码
        String content;
        while ((content = br.readLine()) != null) {
            if (content.contains(aimStr)) {
                System.out.println(file.getPath() + content);
            }
        }
    }
}
